transcode: fix destructive assignment after drain
authorAlaric Senat <alaric@videolabs.io>
Mon, 24 Jun 2024 16:11:23 +0000 (18:11 +0200)
committerSebastian Ramacher <sramacher@debian.org>
Tue, 21 Jan 2025 18:02:47 +0000 (19:02 +0100)
commitcc97ade3b75264af75f6987318ca6d2240c9e736
tree28a4d61d633e8779c26e3701861c70f592969a02
parent460d9f638189e6c836e5e7cf53348a41b4e91d08
transcode: fix destructive assignment after drain

The drain checks are done after the first encoder output fetch. At this
point, `out` is already filled with some frames gotten from the encoder
some lines above:

```
// ...
    if( p_sys->i_threads >= 1 )
    {
        /* Pick up any return data the encoder thread wants to output. */
        vlc_mutex_lock( &p_sys->lock_out );
        *out = p_sys->p_buffers;
        p_sys->p_buffers = NULL;
        vlc_mutex_unlock( &p_sys->lock_out );
    }

// ...
```

This assignment currently leaks all previously gathered frames to
replace them by the drained output. This patch appends the drained
frames to the existing output instead.

Gbp-Pq: Name 0008-transcode-fix-destructive-assignment-after-drain.patch
modules/stream_out/transcode/video.c